var trd = trd ||
function(a, b) {
	var m, c = {},
		d = c.lib = {},
		e = function() {},
		f = d.Base = {
			extend: function(a) {
				e.prototype = this;
				var b = new e;
				return a && b.mixIn(a), b.hasOwnProperty("init") || (b.init = function() {
					b.$super.init.apply(this, arguments)
				}), b.init.prototype = b, b.$super = this, b
			},
			create: function() {
				var a = this.extend();
				return a.init.apply(a, arguments), a
			},
			init: function() {},
			mixIn: function(a) {
				for (var b in a) a.hasOwnProperty(b) && (this[b] = a[b]);
				a.hasOwnProperty("toString") && (this.toString = a.toString)
			},
			clone: function() {
				return this.init.prototype.extend(this)
			}
		},
		g = d.WordArray = f.extend({
			init: function(a, c) {
				a = this.words = a || [], this.sigBytes = c != b ? c : 4 * a.length
			},
			toString: function(a) {
				return (a || i).stringify(this)
			},
			concat: function(a) {
				var e, b = this.words,
					c = a.words,
					d = this.sigBytes;
				if (a = a.sigBytes, this.clamp(), d % 4) for (e = 0; a > e; e++) b[d + e >>> 2] |= (255 & c[e >>> 2] >>> 24 - 8 * (e % 4)) << 24 - 8 * ((d + e) % 4);
				else if (65535 < c.length) for (e = 0; a > e; e += 4) b[d + e >>> 2] = c[e >>> 2];
				else b.push.apply(b, c);
				return this.sigBytes += a, this
			},
			clamp: function() {
				var b = this.words,
					c = this.sigBytes;
				b[c >>> 2] &= 4294967295 << 32 - 8 * (c % 4), b.length = a.ceil(c / 4)
			},
			clone: function() {
				var a = f.clone.call(this);
				return a.words = this.words.slice(0), a
			},
			random: function(b) {
				for (var c = [], d = 0; b > d; d += 4) c.push(0 | 4294967296 * a.random());
				return new g.init(c, b)
			}
		}),
		h = c.enc = {},
		i = h.Hex = {
			stringify: function(a) {
				var c, d, e, b = a.words;
				for (a = a.sigBytes, c = [], d = 0; a > d; d++) e = 255 & b[d >>> 2] >>> 24 - 8 * (d % 4), c.push((e >>> 4).toString(16)), c.push((15 & e).toString(16));
				return c.join("")
			},
			parse: function(a) {
				for (var b = a.length, c = [], d = 0; b > d; d += 2) c[d >>> 3] |= parseInt(a.substr(d, 2), 16) << 24 - 4 * (d % 8);
				return new g.init(c, b / 2)
			}
		},
		j = h.Latin1 = {
			stringify: function(a) {
				var c, d, b = a.words;
				for (a = a.sigBytes, c = [], d = 0; a > d; d++) c.push(String.fromCharCode(255 & b[d >>> 2] >>> 24 - 8 * (d % 4)));
				return c.join("")
			},
			parse: function(a) {
				for (var b = a.length, c = [], d = 0; b > d; d++) c[d >>> 2] |= (255 & a.charCodeAt(d)) << 24 - 8 * (d % 4);
				return new g.init(c, b)
			}
		},
		k = h.Utf8 = {
			stringify: function(a) {
				try {
					return decodeURIComponent(escape(j.stringify(a)))
				} catch (b) {
					throw Error("Malformed UTF-8 data")
				}
			},
			parse: function(a) {
				return j.parse(unescape(encodeURIComponent(a)))
			}
		},
		l = d.BufferedBlockAlgorithm = f.extend({
			reset: function() {
				this._data = new g.init, this._nDataBytes = 0
			},
			_append: function(a) {
				"string" == typeof a && (a = k.parse(a)), this._data.concat(a), this._nDataBytes += a.sigBytes
			},
			_process: function(b) {
				var i, c = this._data,
					d = c.words,
					e = c.sigBytes,
					f = this.blockSize,
					h = e / (4 * f);
				if (h = b ? a.ceil(h) : a.max((0 | h) - this._minBufferSize, 0), b = h * f, e = a.min(4 * b, e), b) {
					for (i = 0; b > i; i += f) this._doProcessBlock(d, i);
					i = d.splice(0, b), c.sigBytes -= e
				}
				return new g.init(i, e)
			},
			clone: function() {
				var a = f.clone.call(this);
				return a._data = this._data.clone(), a
			},
			_minBufferSize: 0
		});
	return d.Hasher = l.extend({
		cfg: f.extend(),
		init: function(a) {
			this.cfg = this.cfg.extend(a), this.reset()
		},
		reset: function() {
			l.reset.call(this), this._doReset()
		},
		update: function(a) {
			return this._append(a), this._process(), this
		},
		finalize: function(a) {
			return a && this._append(a), this._doFinalize()
		},
		blockSize: 16,
		_createHelper: function(a) {
			return function(b, c) {
				return new a.init(c).finalize(b)
			}
		},
		_createHmacHelper: function(a) {
			return function(b, c) {
				return new m.HMAC.init(a, c).finalize(b)
			}
		}
	}), m = c.algo = {}, c
}(Math);
!
function() {
	var a = trd,
		b = a.lib.WordArray;
	a.enc.Base64 = {
		stringify: function(a) {
			var e, f, g, b = a.words,
				c = a.sigBytes,
				d = this._map;
			for (a.clamp(), a = [], e = 0; c > e; e += 3) for (f = (255 & b[e >>> 2] >>> 24 - 8 * (e % 4)) << 16 | (255 & b[e + 1 >>> 2] >>> 24 - 8 * ((e + 1) % 4)) << 8 | 255 & b[e + 2 >>> 2] >>> 24 - 8 * ((e + 2) % 4), g = 0; 4 > g && c > e + .75 * g; g++) a.push(d.charAt(63 & f >>> 6 * (3 - g)));
			if (b = d.charAt(64)) for (; a.length % 4;) a.push(b);
			return a.join("")
		},
		parse: function(a) {
			var f, g, h, i, c = a.length,
				d = this._map,
				e = d.charAt(64);
			for (e && (e = a.indexOf(e), -1 != e && (c = e)), e = [], f = 0, g = 0; c > g; g++) g % 4 && (h = d.indexOf(a.charAt(g - 1)) << 2 * (g % 4), i = d.indexOf(a.charAt(g)) >>> 6 - 2 * (g % 4), e[f >>> 2] |= (h | i) << 24 - 8 * (f % 4), f++);
			return b.create(e, f)
		},
		_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
	}
}(), function(a) {
	function b(a, b, c, d, e, f, g) {
		return a = a + (b & c | ~b & d) + e + g, (a << f | a >>> 32 - f) + b
	}
	function c(a, b, c, d, e, f, g) {
		return a = a + (b & d | c & ~d) + e + g, (a << f | a >>> 32 - f) + b
	}
	function d(a, b, c, d, e, f, g) {
		return a = a + (b ^ c ^ d) + e + g, (a << f | a >>> 32 - f) + b
	}
	function e(a, b, c, d, e, f, g) {
		return a = a + (c ^ (b | ~d)) + e + g, (a << f | a >>> 32 - f) + b
	}
	for (var f = trd, g = f.lib, h = g.WordArray, i = g.Hasher, g = f.algo, j = [], k = 0; 64 > k; k++) j[k] = 0 | 4294967296 * a.abs(a.sin(k + 1));
	g = g.MD5 = i.extend({
		_doReset: function() {
			this._hash = new h.init([1732584193, 4023233417, 2562383102, 271733878])
		},
		_doProcessBlock: function(a, f) {
			var g, h, i, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z, A, B;
			for (g = 0; 16 > g; g++) h = f + g, i = a[h], a[h] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8);
			g = this._hash.words, h = a[f + 0], i = a[f + 1], k = a[f + 2], l = a[f + 3], m = a[f + 4], n = a[f + 5], o = a[f + 6], p = a[f + 7], q = a[f + 8], r = a[f + 9], s = a[f + 10], t = a[f + 11], u = a[f + 12], v = a[f + 13], w = a[f + 14], x = a[f + 15], y = g[0], z = g[1], A = g[2], B = g[3], y = b(y, z, A, B, h, 7, j[0]), B = b(B, y, z, A, i, 12, j[1]), A = b(A, B, y, z, k, 17, j[2]), z = b(z, A, B, y, l, 22, j[3]), y = b(y, z, A, B, m, 7, j[4]), B = b(B, y, z, A, n, 12, j[5]), A = b(A, B, y, z, o, 17, j[6]), z = b(z, A, B, y, p, 22, j[7]), y = b(y, z, A, B, q, 7, j[8]), B = b(B, y, z, A, r, 12, j[9]), A = b(A, B, y, z, s, 17, j[10]), z = b(z, A, B, y, t, 22, j[11]), y = b(y, z, A, B, u, 7, j[12]), B = b(B, y, z, A, v, 12, j[13]), A = b(A, B, y, z, w, 17, j[14]), z = b(z, A, B, y, x, 22, j[15]), y = c(y, z, A, B, i, 5, j[16]), B = c(B, y, z, A, o, 9, j[17]), A = c(A, B, y, z, t, 14, j[18]), z = c(z, A, B, y, h, 20, j[19]), y = c(y, z, A, B, n, 5, j[20]), B = c(B, y, z, A, s, 9, j[21]), A = c(A, B, y, z, x, 14, j[22]), z = c(z, A, B, y, m, 20, j[23]), y = c(y, z, A, B, r, 5, j[24]), B = c(B, y, z, A, w, 9, j[25]), A = c(A, B, y, z, l, 14, j[26]), z = c(z, A, B, y, q, 20, j[27]), y = c(y, z, A, B, v, 5, j[28]), B = c(B, y, z, A, k, 9, j[29]), A = c(A, B, y, z, p, 14, j[30]), z = c(z, A, B, y, u, 20, j[31]), y = d(y, z, A, B, n, 4, j[32]), B = d(B, y, z, A, q, 11, j[33]), A = d(A, B, y, z, t, 16, j[34]), z = d(z, A, B, y, w, 23, j[35]), y = d(y, z, A, B, i, 4, j[36]), B = d(B, y, z, A, m, 11, j[37]), A = d(A, B, y, z, p, 16, j[38]), z = d(z, A, B, y, s, 23, j[39]), y = d(y, z, A, B, v, 4, j[40]), B = d(B, y, z, A, h, 11, j[41]), A = d(A, B, y, z, l, 16, j[42]), z = d(z, A, B, y, o, 23, j[43]), y = d(y, z, A, B, r, 4, j[44]), B = d(B, y, z, A, u, 11, j[45]), A = d(A, B, y, z, x, 16, j[46]), z = d(z, A, B, y, k, 23, j[47]), y = e(y, z, A, B, h, 6, j[48]), B = e(B, y, z, A, p, 10, j[49]), A = e(A, B, y, z, w, 15, j[50]), z = e(z, A, B, y, n, 21, j[51]), y = e(y, z, A, B, u, 6, j[52]), B = e(B, y, z, A, l, 10, j[53]), A = e(A, B, y, z, s, 15, j[54]), z = e(z, A, B, y, i, 21, j[55]), y = e(y, z, A, B, q, 6, j[56]), B = e(B, y, z, A, x, 10, j[57]), A = e(A, B, y, z, o, 15, j[58]), z = e(z, A, B, y, v, 21, j[59]), y = e(y, z, A, B, m, 6, j[60]), B = e(B, y, z, A, t, 10, j[61]), A = e(A, B, y, z, k, 15, j[62]), z = e(z, A, B, y, r, 21, j[63]), g[0] = 0 | g[0] + y, g[1] = 0 | g[1] + z, g[2] = 0 | g[2] + A, g[3] = 0 | g[3] + B
		},
		_doFinalize: function() {
			var f, b = this._data,
				c = b.words,
				d = 8 * this._nDataBytes,
				e = 8 * b.sigBytes;
			for (c[e >>> 5] |= 128 << 24 - e % 32, f = a.floor(d / 4294967296), c[(e + 64 >>> 9 << 4) + 15] = 16711935 & (f << 8 | f >>> 24) | 4278255360 & (f << 24 | f >>> 8), c[(e + 64 >>> 9 << 4) + 14] = 16711935 & (d << 8 | d >>> 24) | 4278255360 & (d << 24 | d >>> 8), b.sigBytes = 4 * (c.length + 1), this._process(), b = this._hash, c = b.words, d = 0; 4 > d; d++) e = c[d], c[d] = 16711935 & (e << 8 | e >>> 24) | 4278255360 & (e << 24 | e >>> 8);
			return b
		},
		clone: function() {
			var a = i.clone.call(this);
			return a._hash = this._hash.clone(), a
		}
	}), f.MD5 = i._createHelper(g), f.HmacMD5 = i._createHmacHelper(g)
}(Math), function() {
	var a = trd,
		b = a.lib,
		c = b.Base,
		d = b.WordArray,
		b = a.algo,
		e = b.EvpKDF = c.extend({
			cfg: c.extend({
				keySize: 4,
				hasher: b.MD5,
				iterations: 1
			}),
			init: function(a) {
				this.cfg = this.cfg.extend(a)
			},
			compute: function(a, b) {
				var c, e, f, g, h, i, j;
				for (c = this.cfg, e = c.hasher.create(), f = d.create(), g = f.words, h = c.keySize, c = c.iterations; g.length < h;) {
					for (i && e.update(i), i = e.update(a).finalize(b), e.reset(), j = 1; c > j; j++) i = e.finalize(i), e.reset();
					f.concat(i)
				}
				return f.sigBytes = 4 * h, f
			}
		});
	a.EvpKDF = function(a, b, c) {
		return e.create(c).compute(a, b)
	}
}(), trd.lib.Cipher ||
function(a) {
	var j, k, l, m, n, o, b = trd,
		c = b.lib,
		d = c.Base,
		e = c.WordArray,
		f = c.BufferedBlockAlgorithm,
		g = b.enc.Base64,
		h = b.algo.EvpKDF,
		i = c.Cipher = f.extend({
			cfg: d.extend(),
			createEncryptor: function(a, b) {
				return this.create(this._ENC_XFORM_MODE, a, b)
			},
			createDecryptor: function(a, b) {
				return this.create(this._DEC_XFORM_MODE, a, b)
			},
			init: function(a, b, c) {
				this.cfg = this.cfg.extend(c), this._xformMode = a, this._key = b, this.reset()
			},
			reset: function() {
				f.reset.call(this), this._doReset()
			},
			process: function(a) {
				return this._append(a), this._process()
			},
			finalize: function(a) {
				return a && this._append(a), this._doFinalize()
			},
			keySize: 4,
			ivSize: 4,
			_ENC_XFORM_MODE: 1,
			_DEC_XFORM_MODE: 2,
			_createHelper: function(a) {
				return {
					encrypt: function(b, c, d) {
						return ("string" == typeof c ? o : n).encrypt(a, b, c, d)
					},
					decrypt: function(b, c, d) {
						return ("string" == typeof c ? o : n).decrypt(a, b, c, d)
					}
				}
			}
		});
	c.StreamCipher = i.extend({
		_doFinalize: function() {
			return this._process(!0)
		},
		blockSize: 1
	}), j = b.mode = {}, k = function(b, c, d) {
		var f, e = this._iv;
		for (e ? this._iv = a : e = this._prevBlock, f = 0; d > f; f++) b[c + f] ^= e[f]
	}, l = (c.BlockCipherMode = d.extend({
		createEncryptor: function(a, b) {
			return this.Encryptor.create(a, b)
		},
		createDecryptor: function(a, b) {
			return this.Decryptor.create(a, b)
		},
		init: function(a, b) {
			this._cipher = a, this._iv = b
		}
	})).extend(), l.Encryptor = l.extend({
		processBlock: function(a, b) {
			var c = this._cipher,
				d = c.blockSize;
			k.call(this, a, b, d), c.encryptBlock(a, b), this._prevBlock = a.slice(b, b + d)
		}
	}), l.Decryptor = l.extend({
		processBlock: function(a, b) {
			var c = this._cipher,
				d = c.blockSize,
				e = a.slice(b, b + d);
			c.decryptBlock(a, b), k.call(this, a, b, d), this._prevBlock = e
		}
	}), j = j.CBC = l, l = (b.pad = {}).Pkcs7 = {
		pad: function(a, b) {
			for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, f = [], g = 0; c > g; g += 4) f.push(d);
			c = e.create(f, c), a.concat(c)
		},
		unpad: function(a) {
			a.sigBytes -= 255 & a.words[a.sigBytes - 1 >>> 2]
		}
	}, c.BlockCipher = i.extend({
		cfg: i.cfg.extend({
			mode: j,
			padding: l
		}),
		reset: function() {
			var a, b, c;
			i.reset.call(this), a = this.cfg, b = a.iv, a = a.mode, this._xformMode == this._ENC_XFORM_MODE ? c = a.createEncryptor : (c = a.createDecryptor, this._minBufferSize = 1), this._mode = c.call(a, this, b && b.words)
		},
		_doProcessBlock: function(a, b) {
			this._mode.processBlock(a, b)
		},
		_doFinalize: function() {
			var b, a = this.cfg.padding;
			return this._xformMode == this._ENC_XFORM_MODE ? (a.pad(this._data, this.blockSize), b = this._process(!0)) : (b = this._process(!0), a.unpad(b)), b
		},
		blockSize: 4
	}), m = c.CipherParams = d.extend({
		init: function(a) {
			this.mixIn(a)
		},
		toString: function(a) {
			return (a || this.formatter).stringify(this)
		}
	}), j = (b.format = {}).OpenSSL = {
		stringify: function(a) {
			var b = a.ciphertext;
			return a = a.salt, (a ? e.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(g)
		},
		parse: function(a) {
			var b, c;
			return a = g.parse(a), b = a.words, 1398893684 == b[0] && 1701076831 == b[1] && (c = e.create(b.slice(2, 4)), b.splice(0, 4), a.sigBytes -= 16), m.create({
				ciphertext: a,
				salt: c
			})
		}
	}, n = c.SerializableCipher = d.extend({
		cfg: d.extend({
			format: j
		}),
		encrypt: function(a, b, c, d) {
			d = this.cfg.extend(d);
			var e = a.createEncryptor(c, d);
			return b = e.finalize(b), e = e.cfg, m.create({
				ciphertext: b,
				key: c,
				iv: e.iv,
				algorithm: a,
				mode: e.mode,
				padding: e.padding,
				blockSize: a.blockSize,
				formatter: d.format
			})
		},
		decrypt: function(a, b, c, d) {
			return d = this.cfg.extend(d), b = this._parse(b, d.format), a.createDecryptor(c, d).finalize(b.ciphertext)
		},
		_parse: function(a, b) {
			return "string" == typeof a ? b.parse(a, this) : a
		}
	}), b = (b.kdf = {}).OpenSSL = {
		execute: function(a, b, c, d) {
			return d || (d = e.random(8)), a = h.create({
				keySize: b + c
			}).compute(a, d), c = e.create(a.words.slice(b), 4 * c), a.sigBytes = 4 * b, m.create({
				key: a,
				iv: c,
				salt: d
			})
		}
	}, o = c.PasswordBasedCipher = n.extend({
		cfg: n.cfg.extend({
			kdf: b
		}),
		encrypt: function(a, b, c, d) {
			return d = this.cfg.extend(d), c = d.kdf.execute(c, a.keySize, a.ivSize), d.iv = c.iv, a = n.encrypt.call(this, a, b, c.key, d), a.mixIn(c), a
		},
		decrypt: function(a, b, c, d) {
			return d = this.cfg.extend(d), b = this._parse(b, d.format), c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt), d.iv = c.iv, n.decrypt.call(this, a, b, c.key, d)
		}
	})
}(), function() {
	var a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w;
	for (a = trd, b = a.lib.BlockCipher, c = a.algo, d = [], e = [], f = [], g = [], h = [], i = [], j = [], k = [], l = [], m = [], n = [], o = 0; 256 > o; o++) n[o] = 128 > o ? o << 1 : 283 ^ o << 1;
	for (p = 0, q = 0, o = 0; 256 > o; o++) r = q ^ q << 1 ^ q << 2 ^ q << 3 ^ q << 4, r = 99 ^ (r >>> 8 ^ 255 & r), d[p] = r, e[r] = p, s = n[p], t = n[s], u = n[t], v = 257 * n[r] ^ 16843008 * r, f[p] = v << 24 | v >>> 8, g[p] = v << 16 | v >>> 16, h[p] = v << 8 | v >>> 24, i[p] = v, v = 16843009 * u ^ 65537 * t ^ 257 * s ^ 16843008 * p, j[r] = v << 24 | v >>> 8, k[r] = v << 16 | v >>> 16, l[r] = v << 8 | v >>> 24, m[r] = v, p ? (p = s ^ n[n[n[u ^ s]]], q ^= n[n[q]]) : p = q = 1;
	w = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], c = c.ALGON = b.extend({
		_doReset: function() {
			var a, b, c, e, f, g;
			for (a = this._key, b = a.words, c = a.sigBytes / 4, a = 4 * ((this._nRounds = c + 6) + 1), e = this._keySchedule = [], f = 0; a > f; f++) c > f ? e[f] = b[f] : (g = e[f - 1], f % c ? c > 6 && 4 == f % c && (g = d[g >>> 24] << 24 | d[255 & g >>> 16] << 16 | d[255 & g >>> 8] << 8 | d[255 & g]) : (g = g << 8 | g >>> 24, g = d[g >>> 24] << 24 | d[255 & g >>> 16] << 16 | d[255 & g >>> 8] << 8 | d[255 & g], g ^= w[0 | f / c] << 24), e[f] = e[f - c] ^ g);
			for (b = this._invKeySchedule = [], c = 0; a > c; c++) f = a - c, g = c % 4 ? e[f] : e[f - 4], b[c] = 4 > c || 4 >= f ? g : j[d[g >>> 24]] ^ k[d[255 & g >>> 16]] ^ l[d[255 & g >>> 8]] ^ m[d[255 & g]]
		},
		encryptBlock: function(a, b) {
			this._doCryptBlock(a, b, this._keySchedule, f, g, h, i, d)
		},
		decryptBlock: function(a, b) {
			var c = a[b + 1];
			a[b + 1] = a[b + 3], a[b + 3] = c, this._doCryptBlock(a, b, this._invKeySchedule, j, k, l, m, e), c = a[b + 1], a[b + 1] = a[b + 3], a[b + 3] = c
		},
		_doCryptBlock: function(a, b, c, d, e, f, g, h) {
			var i, j, k, l, m, n, o, p, q, r;
			for (i = this._nRounds, j = a[b] ^ c[0], k = a[b + 1] ^ c[1], l = a[b + 2] ^ c[2], m = a[b + 3] ^ c[3], n = 4, o = 1; i > o; o++) p = d[j >>> 24] ^ e[255 & k >>> 16] ^ f[255 & l >>> 8] ^ g[255 & m] ^ c[n++], q = d[k >>> 24] ^ e[255 & l >>> 16] ^ f[255 & m >>> 8] ^ g[255 & j] ^ c[n++], r = d[l >>> 24] ^ e[255 & m >>> 16] ^ f[255 & j >>> 8] ^ g[255 & k] ^ c[n++], m = d[m >>> 24] ^ e[255 & j >>> 16] ^ f[255 & k >>> 8] ^ g[255 & l] ^ c[n++], j = p, k = q, l = r;
			p = (h[j >>> 24] << 24 | h[255 & k >>> 16] << 16 | h[255 & l >>> 8] << 8 | h[255 & m]) ^ c[n++], q = (h[k >>> 24] << 24 | h[255 & l >>> 16] << 16 | h[255 & m >>> 8] << 8 | h[255 & j]) ^ c[n++], r = (h[l >>> 24] << 24 | h[255 & m >>> 16] << 16 | h[255 & j >>> 8] << 8 | h[255 & k]) ^ c[n++], m = (h[m >>> 24] << 24 | h[255 & j >>> 16] << 16 | h[255 & k >>> 8] << 8 | h[255 & l]) ^ c[n++], a[b] = p, a[b + 1] = q, a[b + 2] = r, a[b + 3] = m
		},
		keySize: 8
	}), a.ALGON = b._createHelper(c)
}(), function(a) {
	var b = window.Chicago || {
		utils: {
			now: Date.now ||
			function() {
				return (new Date).getTime()
			},
			uid: function(a) {
				return (a || "id") + b.utils.now() + "RAND" + Math.ceil(1e5 * Math.random())
			},
			is: {
				number: function(a) {
					return !isNaN(parseFloat(a)) && isFinite(a)
				},
				fn: function(a) {
					return "function" == typeof a
				},
				object: function(a) {
					return "[object Object]" === Object.prototype.toString.call(a)
				}
			},
			debounce: function(a, b, c) {
				var d;
				return function() {
					var e = this,
						f = arguments,
						g = function() {
							d = null, c || a.apply(e, f)
						},
						h = c && !d;
					d && clearTimeout(d), d = setTimeout(g, b), h && a.apply(e, f)
				}
			}
		},
		$: window.jQuery || null
	};
	if ("function" == typeof define && define.amd && define("chicago", function() {
		return b.load = function(a, c, d, e) {
			var i, j, f = a.split(","),
				g = [],
				h = (e.config && e.config.chicago && e.config.chicago.base ? e.config.chicago.base : "").replace(/\/+$/g, "");
			if (!h) throw new Error("Please define base path to jQuery resize.end in the requirejs config.");
			for (i = 0; i < f.length;) j = f[i].replace(/\./g, "/"), g.push(h + "/" + j), i += 1;
			c(g, function() {
				d(b)
			})
		}, b
	}), window && window.jQuery) return a(b, window, window.document);
	if (!window.jQuery) throw new Error("jQuery resize.end requires jQuery")
}(function(a, b, c) {
	a.$win = a.$(b), a.$doc = a.$(c), a.events || (a.events = {}), a.events.resizeend = {
		defaults: {
			delay: 250
		},
		setup: function() {
			var d, e, f, g, h, b = arguments,
				c = {
					delay: a.$.event.special.resizeend.defaults.delay
				};
			return a.utils.is.fn(b[0]) ? d = b[0] : a.utils.is.number(b[0]) ? c.delay = b[0] : a.utils.is.object(b[0]) && (c = a.$.extend({}, c, b[0])), e = a.utils.uid("resizeend"), f = a.$.extend({
				delay: a.$.event.special.resizeend.defaults.delay
			}, c), g = f, h = function(b) {
				g && clearTimeout(g), g = setTimeout(function() {
					return g = null, b.type = "resizeend.chicago.dom", a.$(b.target).trigger("resizeend", b)
				}, f.delay)
			}, a.$(this).data("chicago.event.resizeend.uid", e), a.$(this).on("resize", a.utils.debounce(h, 100)).data(e, h)
		},
		teardown: function() {
			var b = a.$(this).data("chicago.event.resizeend.uid");
			return a.$(this).off("resize", a.$(this).data(b)), a.$(this).removeData(b), a.$(this).removeData("chicago.event.resizeend.uid")
		}
	}, function() {
		a.$.event.special.resizeend = a.events.resizeend, a.$.fn.resizeend = function(b, c) {
			return this.each(function() {
				a.$(this).on("resizeend", b, c)
			})
		}
	}()
}), "undefined" != typeof CanvasRenderingContext2D && "undefined" != typeof HTMLCanvasElement && (function(a) {
	var b = function() {
			var a = document.createElement("canvas"),
				b = a.getContext("2d"),
				c = b.backingStorePixelRatio || b.webkitBackingStorePixelRatio || b.mozBackingStorePixelRatio || b.msBackingStorePixelRatio || b.oBackingStorePixelRatio || b.backingStorePixelRatio || 1;
			return (window.devicePixelRatio || 1) / c
		}(),
		c = function(a, b) {
			for (var c in a) a.hasOwnProperty(c) && b(a[c], c)
		},
		d = {
			fillRect: "all",
			clearRect: "all",
			strokeRect: "all",
			moveTo: "all",
			lineTo: "all",
			arc: [0, 1, 2],
			arcTo: "all",
			bezierCurveTo: "all",
			isPointinPath: "all",
			isPointinStroke: "all",
			quadraticCurveTo: "all",
			rect: "all",
			translate: "all",
			createRadialGradient: "all",
			createLinearGradient: "all"
		};
	1 !== b && (c(d, function(c, d) {
		a[d] = function(a) {
			return function() {
				var d, e, f = Array.prototype.slice.call(arguments);
				if ("all" === c) f = f.map(function(a) {
					return a * b
				});
				else if (Array.isArray(c)) for (d = 0, e = c.length; e > d; d++) f[c[d]] *= b;
				return a.apply(this, f)
			}
		}(a[d])
	}), a.stroke = function(a) {
		return function() {
			this.lineWidth *= b, a.apply(this, arguments), this.lineWidth /= b
		}
	}(a.stroke), a.fillText = function(a) {
		return function() {
			var c = Array.prototype.slice.call(arguments);
			c[1] *= b, c[2] *= b, this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function(a, c, d) {
				return c * b + d
			}), a.apply(this, c), this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function(a, c, d) {
				return c / b + d
			})
		}
	}(a.fillText), a.strokeText = function(a) {
		return function() {
			var c = Array.prototype.slice.call(arguments);
			c[1] *= b, c[2] *= b, this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function(a, c, d) {
				return c * b + d
			}), a.apply(this, c), this.font = this.font.replace(/(\d+)(px|em|rem|pt)/g, function(a, c, d) {
				return c / b + d
			})
		}
	}(a.strokeText))
}(CanvasRenderingContext2D.prototype), function(a) {
	a.getContext = function(a) {
		return function(b) {
			var c, d, e = a.call(this, b);
			return "2d" === b && (c = e.backingStorePixelRatio || e.webkitBackingStorePixelRatio || e.mozBackingStorePixelRatio || e.msBackingStorePixelRatio || e.oBackingStorePixelRatio || e.backingStorePixelRatio || 1, d = (window.devicePixelRatio || 1) / c, d > 1 && (this.style.width = this.width + "px", this.width *= d, this.height *= d)), e
		}
	}(a.getContext)
}(HTMLCanvasElement.prototype));